/*
 * @Description: 
 * @Version: 2.0
 * @Autor: wangmiao
 * @Date: 2022-09-20 19:57:08
 * @LastEditors: wangmiao
 * @LastEditTime: 2022-11-04 18:24:42
 */
// class Parent{}

// class Son extends Parent{
//   constructor() {
//     super()
//   }
// }

// console.log(Son.prototype.__proto__ === Parent.prototype)
// console.log(Son.__proto__ === Parent)

// 数组去重（使用原地法）

// const nums = [1,1,1,2,2,3]
// const nums = [1,1,1,2,2,3]

// function getNewArr(arr) {
//   let slow = 1
//   let fast = 1
//   for(let i = 1; i < arr.length; i++) {
//     if(arr[i] !== arr[i-1]) {
//       arr[slow] = arr[i]
//       slow++
//     }
//     fast++
//   }
//   return arr.slice(0, slow)
// }
// console.log(getNewArr(nums))


// function getNewArr(arr) {
//   let slow = 1
//   let fast = 1
//   while(fast < arr.length) {
//     if(arr[fast] !== arr[fast-1]) {

//       arr[slow++] = arr[fast]
//     }
//     fast++
//   }
//   console.log(slow)
//   arr.length = slow
//   return arr
// }


// var isValidBST = function(root) {
//   let flag = true
//   const dfs = (node) => {
//       if(!node) return 
//       if(node.left && node.right) {
//           if(node.left.val < node.val && node.right.val > node.val) {}else {
//               flag = false
//               return
//           }
//       }
//       if(node.left && node.right === null) {
//           if(node.left < node.val) {}else {
//               flag = false
//               return
//           }
//       }
//       if(node.right && node.left === null) {
//           if(node.right > node.val) {}else {
//               flag = false
//               return
//           }
//       }
//        dfs(node.left)
//        dfs(node.right)
//   }
//   dfs(root)
//   return flag
// };


// let root = {
//   left: {
//     val: -1,
//   },
//   val: 0
// }


// console.log(isValidBST(root))


// function* g() {
//   var o = 1;
//   var a = yield o++;
//   console.log('a = ' + a);
//   var b = yield o++;
// }
// var gen = g();

// console.log(gen.next());
// console.log('------');
// console.log(gen.next());



var uniquePaths = function(m, n) {
  if(m == 0 && n == 0) return 0
  // let a = 0
  // let b = 0
  // let c = 0
  let dp = new Array(m).fill().map(() => new Array(n).fill(0))
  let arrList = new Array(m).fill().map(() => new Array(n).fill())
  for(let i = 0; i < m; i++) {
      arrList[0][i] = 1
  }
  for(let i = 0; i < n; i++) {
      arrList[i][0] = 1 
  }
  for(let i = 1; i < m; i++) {
      for(let j = 1; j < n; j++) {
          dp[i][j] = dp[i-1][j] + dp[i][j-1]
      }
  }
  return dp[m-1][n-1]
};

console.log(uniquePaths(3,7))
